<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<script type="text/javascript">
    // 首先我们先来定义一个简单的对象monkey
    var monkey = {
        hair: true,
        feeds: 'bananas',
        breatehes: 'air'
    }

    //然后，我们在创建一个叫做Human()的构造器函数，并将其原型属性设置为指向monkey
    function Human(name){
        this.name = name;
    }
    Human.prototype = monkey;

    // 现在，如果我们新建一个叫做george的Human对象，并提问‘monkey是George的原型吗？’答案是true
    var george = new Human('George');
    console.log(monkey.isPrototypeOf(george));

    // 需要注意的是，我们在这里是预先知道了MONKEY可能是george的原型，才提出了问题，然后获得一个布尔值作为回应，那么，是否能在不知道某个对象原型是什么的情况下，获得对象的原型呢？大多数浏览器是可以的，因为大多数浏览器都实现了Object.getPrototypeOf()方法
    console.log(Object.getPrototypeOf(george).feeds);
    console.log(Object.getPrototypeOf(george) === monkey);
</script>
<script type="text/javascript">
    console.log('||');
    console.log('5.1.6--------------------------');
    console.log('||');
    // 现在我们先改写一下那个有Monkey对象做原型的Human()对象构造器
    var monkey = {
        feeds: 'bananas',
        breathes: 'air'
    }
    function Human() {};
    Human.prototype = monkey;

    // 然后我们来创建一个developer对象，并赋予它一些属性
    var developer = new Human();
    developer.feeds = 'pizza';
    developer.hacks = 'JavaScript';

    // 接着，我们访问一些属性，例如developer对象的hacks属性
    console.log(developer.hacks);
    console.log(developer.feeds);

    // 但breathes在developer对象自身的属性中是不存在的，所以就得去原型中查询，就好像其中有一个神秘链接，或者秘密通道指向了相关的原型对象
    console.log(developer.breathes);

    // 在现在JavaScript环境中，对象中确实存在一个指向相关原型的链接，这个神秘的链接被叫做__photo__属性
    console.log(developer.__photo__ === monkey);
</script>
</body>
</html>
